/**
 * 当数据变化触发依赖， dep 通知所有的 Watcher 实例更新视图
 * 自身实例化的时候往 dep 对象中添加自己
 */
class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    // data 中的属性名称
    this.key = key
    // Dep 对象的静态属性，在getter时把Watcher添加到subs 中
    Dep.target = this
    // 触发一次getter,让dep为当前的key记录Watcher
    this.oldValue = this.vm[key]
    this.cb = cb
    // 清空 
    Dep.target = null
  }
  update () {
    const newValue = this.vm[this.key]
    if (this.oldValue === newValue) {
      return
    }
    // 调用回调函数，更新视图
    this.cb(newValue)
  }
}